package facade.Socio;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import dao.implementations.postgresql.Alumno.AlumnoDB;
import dao.implementations.postgresql.Gae.GaeDB;
import dao.implementations.postgresql.Socio.PautaEvaluacionDB;
import dao.interfaces.Alumno.IAlumno;
import dao.interfaces.Gae.IGae;
import dao.interfaces.Socio.IPautaEvaluacion;
import dao.transferObjects.Gae.CursoTO;
import dao.transferObjects.Gae.GaeTO;
import dao.transferObjects.Socio.PautaEvaluacionTO;
import dao.transferObjects.Socio.SocioTO;
import facade.FacadeBase;

public class FacadePautaEvaluacion extends FacadeBase {
	
	public int crearPautaEvaluacion(SocioTO socio, GaeTO gae)
	{
		int resp = -1; 
		
		IPautaEvaluacion pautaEvaluacionDB = new PautaEvaluacionDB(this.connection.getConnection());
		
		resp = pautaEvaluacionDB.crearPautaEvaluacion(socio, gae);
	
		try{
			this.connection.getConnection().close();
		} catch (SQLException e)
		{
			e.printStackTrace();
		}
		
		return resp;
	}
	public int modificarPautaEvaluacion(SocioTO socio, GaeTO gae, PautaEvaluacionTO pautaEvaluacion)
	{
		int resp = -1; 
		double promedioPautasGae = -1;		
		this.connection.setAutoCommit(false);		
		IPautaEvaluacion pautaEvaluacionDB = new PautaEvaluacionDB(this.connection.getConnection());
		IGae gaeDB = new GaeDB(this.connection.getConnection());
		IAlumno alumnoDB = new AlumnoDB(this.connection.getConnection());
		
		resp = pautaEvaluacionDB.modificarPautaEvaluacion(socio, gae, pautaEvaluacion);
		promedioPautasGae = pautaEvaluacionDB.promedioPautasGae(pautaEvaluacion.getRut_socio(), pautaEvaluacion.getId_gae(), pautaEvaluacion.getRut_gae());
		
		//GAE: Actualizar notaPauta? acorde a id de la pauta
		if(resp > 0 && promedioPautasGae > 1)
			resp = gaeDB.asignarNotaSocio(promedioPautasGae, gae.getId_gae(), gae.getRut_gae());
		else
			resp = -1;
		//GAE: Actualizar nota final
		if(resp > 0)
			resp = gaeDB.asignarNotaFinal(gae.getId_gae(), gae.getRut_gae());
		else
			resp = -1;
		
		//ALUMNO: Actualizar notaPauta? acorde a id de la pauta
		if(resp > 0 && promedioPautasGae > 1)
			resp = alumnoDB.asignarNotaSocio(promedioPautasGae, gae.getId_gae(), gae.getRut_gae());
		else
			resp = -1;
		
		//ALUMNO: Actualizar nota final
		if(resp > 0)
			resp = alumnoDB.asignarNotaFinal(gae.getId_gae(), gae.getRut_gae());
		else
			resp = -1;
		
		
		if(resp > 0){
			this.connection.commit();
		}else{
			this.connection.rollback();
		}
	
		try{
			this.connection.getConnection().close();
		} catch (SQLException e)
		{
			e.printStackTrace();
		}
		
		return resp;
	}
	public List<PautaEvaluacionTO> obtenerPautaEvaluacionGae(GaeTO gae)
	{
		//PautaEvaluacionTO pauta = null;
		List<PautaEvaluacionTO> pautas = new ArrayList<PautaEvaluacionTO>();
		IPautaEvaluacion pautaDB = new PautaEvaluacionDB(this.connection.getConnection());
		
		pautas = pautaDB.obtenerPautaEvaluacionGae(gae);
		
		this.closeConnection();
		
		return pautas;
	}
	public List<PautaEvaluacionTO> obtenerPautaAsociadaGaeSocio(SocioTO socio, GaeTO gae)
	{
		//PautaEvaluacionTO pauta = null;
		List<PautaEvaluacionTO> pautas = new ArrayList<PautaEvaluacionTO>();
		IPautaEvaluacion pautaDB = new PautaEvaluacionDB(this.connection.getConnection());
		
		pautas = pautaDB.obtenerPautaAsociadaGaeSocio(socio, gae);
		
		this.closeConnection();
		
		return pautas;
	}
	
	//ESTE METODO ES PARA GENERAR LOS GRAFICOS DEL GAE
	public List<PautaEvaluacionTO> obtenerPautaEvaluacionGae_Realizada(GaeTO gae)
	{
		List<PautaEvaluacionTO> pautas = new ArrayList<PautaEvaluacionTO>();
		IPautaEvaluacion pautaDB = new PautaEvaluacionDB(this.connection.getConnection());
		
		pautas = pautaDB.obtenerPautaEvaluacionGae_Realizada(gae);
		
		this.closeConnection();
		
		return pautas;
	}
	
	public List<PautaEvaluacionTO> obtenerPautaEvaluacionCurso_Realizada(CursoTO curso)
	{
		List<PautaEvaluacionTO> pautas = new ArrayList<PautaEvaluacionTO>();
		IPautaEvaluacion pautaDB = new PautaEvaluacionDB(this.connection.getConnection());
		
		pautas = pautaDB.obtenerPautaEvaluacionCurso_Realizada(curso);
		
		this.closeConnection();
		
		return pautas;
	}
	
	public int eliminarPautaEluacionGAE(int id_gae, int rut_gae)
	{
		int resp = -1;
		
		IPautaEvaluacion pautaDB = new PautaEvaluacionDB(this.connection.getConnection());
		
		resp = pautaDB.eliminarPautaEluacionGAE(id_gae, rut_gae);
		
		try{
			this.connection.getConnection().close();
		}catch (SQLException e){
			e.printStackTrace();
		}
		return resp;
	}
}
